home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 001-025 / disk_024 / conquest / conqin.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  12KB  |  349 lines

  1. #define new(x) x=(tplanet *)malloc(sizeof(tplanet))
  2. #include <stdio.h>
  3. #include "defs.h"
  4. #include "structs.h"
  5. #include "vars.h"
  6.  
  7. conv_bcd( nibble, byte)
  8. int nibble;
  9. char byte;
  10. {
  11.  if (nibble == 1) return( byte & 0x0f);
  12.  return( ( byte >> 4) & 0x0f);
  13. }
  14.  
  15. assign_planets(Ustar0, starnum)
  16. tstar *Ustar0; 
  17. int starnum;
  18. {
  19.         int i1, nplanets;
  20.         tplanet *pplanet;
  21.         tstar ustar;
  22.  
  23.         ustar = *Ustar0;
  24.         nplanets=rnd(4)-2;
  25.         if (nplanets < 0) nplanets = 1;
  26.         if ( nplanets==0 )
  27.                 ustar.first_planet = nil;
  28.         else {
  29.                 new(pplanet);
  30.                 ustar.first_planet=pplanet;
  31.                 for ( i1=1 ; i1<=nplanets; i1++ ) {
  32.                         pplanet->number= rnd(2) + (2*i1) - 2;
  33.                         if ( rnd(4)>2 ) pplanet->capacity = 10 * (rnd(4) + 2);
  34.                              else pplanet->capacity = 5 * rnd(3);
  35.                         pplanet->psee_capacity = pplanet->capacity;
  36.                         pplanet->team=none;
  37.                         pplanet->inhabitants=0;
  38.                         pplanet->iu=0;
  39.                         pplanet->mb=0;
  40.                         pplanet->amb=0;
  41.                         pplanet->conquered = false;
  42.                         pplanet->under_attack = false;
  43.                         pplanet->esee_team = none;
  44.                         pplanet->esee_def = 1;
  45.                         pplanet->pstar=starnum;
  46.                         if ( i1 == nplanets )
  47.                                 pplanet->next=nil;
  48.                         else {
  49.                                 new(pplanet->next);
  50.                                 pplanet=pplanet->next;
  51.                         }
  52.                 }
  53.         };
  54.         *Ustar0 = ustar;
  55. }
  56.  
  57.  
  58. initconst()
  59.  
  60. {
  61.         double sqrt();
  62.         int i3, i1,i2,x,y,temp;
  63.         tteam team; 
  64.         char tt;
  65.         long   date[3];
  66.  
  67.         setnbf(stdin);
  68.  
  69.         printf("\n* Welcome to CONQUEST! *\n\n");
  70.         printf("Amiga version 1.0\n");
  71.         printf("Hit return to continue\n");
  72.         get_char(&i1);
  73.         terminal_type = vt52;
  74.  
  75.         printf("\33<");
  76.  
  77.         DateStamp(date);
  78.         srand48(date[0] ^ date[1] ^ date[2]);
  79.  
  80.         saved_game = false;
  81.  
  82.         /*init the board*/
  83.         for ( i1=1 ; i1<=bdsize; i1++ ) {
  84.                 for ( i2=1 ; i2<=bdsize; i2++ ) {
  85.                         board[i1][i2].enemy=' ';
  86.                         board[i1][i2].tf= ' ';
  87.                         board[i1][i2].star='.';
  88.                 }
  89.         };
  90.         /*init stars*/
  91.         for ( i1= 1 ; i1<=nstars; i1++ ) {
  92.                 enemy_arrivals[i1]=false;
  93.                 en_departures[i1]=false;
  94.                 for ( i2=1; i2<=i1;i2++) i3=rnd(64);
  95.                 player_arrivals[i1]=false;
  96.                 do {
  97.                         x=rnd(bdsize);  
  98.                         y=rnd(bdsize);
  99.                 } 
  100.                 while (board[x][y].star != '.');
  101.                 stars[i1].x=x;     
  102.                 stars[i1].y=y;
  103.                 for(i2=1; i2<=i1; i2++) {
  104.                         if(i1==i2) r2nge[i1][i2] = 0;
  105.                         else {
  106.                                 temp =(((x-stars[i2].x)*(x-stars[i2].x))+
  107.                                         ((y-stars[i2].y)*(y-stars[i2].y)));
  108.                                 r2nge[i1][i2] = 23;
  109.                                 for(i3=1; i3<22; i3++)
  110.                                         if(temp < i3*i3) {
  111.                                                 r2nge[i1][i2] = i3;
  112.                                                 break;
  113.                                                 }
  114.                                 r2nge[i2][i1]=r2nge[i1][i2];
  115.                         }
  116.                 }
  117.                 for ( team = ENEMY ; team<=player; team++ ) {
  118.                         tf_stars[i1][team]=0;
  119.                         col_stars[i1][team] = 0;
  120.                 };
  121.                 board[x][y].star = 'A'+i1-1;
  122.                 board[x][y].enemy = '?';
  123.                 stars[i1].visit[player]=false; 
  124.                 stars[i1].visit[ENEMY]=false;
  125.                 assign_planets(&stars[i1],i1);
  126.         };
  127.         /*initialize research costs*/
  128.         ran_req[5]=0; 
  129.         ran_req[6]=20; 
  130.         ran_req[7]=40; 
  131.         ran_req[8]=70;
  132.         ran_req[9]=100; 
  133.         ran_req[10]=150;
  134.         ran_req[11]= 200;  
  135.         ran_req[12]=300; 
  136.         ran_req[13]=400;
  137.         ran_req[14]=600; 
  138.         ran_req[15] = 900;
  139.         vel_req[2]=40; 
  140.         vel_req[3]=60; 
  141.         vel_req[4]=80; 
  142.         vel_req[5]= 120;
  143.         vel_req[6]=150; 
  144.         vel_req[7]=200; 
  145.         vel_req[8]=250; 
  146.         vel_req[9]=300;
  147.         vel_req[10]=400; 
  148.         vel_req[11]=500; 
  149.         vel_req[12]=600;
  150.         weap_req[3]=0; 
  151.         weap_req[4]=50; 
  152.         weap_req[5]=70;
  153.         weap_req[6]=90; 
  154.         weap_req[7]=120; 
  155.         weap_req[8]=150;
  156.         weap_req[9]=250; 
  157.         weap_req[10]=350;
  158.         /*initialize task forces*/
  159.         tf[ENEMY][1].x = 1; 
  160.         tf[ENEMY][1].y = 1;
  161.         for ( team = ENEMY ; team<=player; team++ ) {
  162.                 for ( i1= 1 ; i1<=26; i1++ ) {
  163.                         tf[team][i1].dest = 0;
  164.                         tf[team][i1].blasting = false;
  165.                         tf[team][i1].withdrew = false;
  166.                         tf[team][i1].s = 0;
  167.                         tf[team][i1].t = 0;
  168.                         tf[team][i1].c = 0;
  169.                         tf[team][i1].b = 0;
  170.                         tf[team][i1].dest = 0;
  171.                         tf[team][i1].eta = 0;
  172.                 };
  173.                 tf[team][1].t = initunit;
  174.                 vel[team] = initvel;
  175.                 range[team] = initrange;
  176.                 weapons[team] = initweap;
  177.                 weap_working[team] = 0;
  178.                 vel_working[team] = 0;
  179.                 ran_working[team] = 0;
  180.         };
  181.         range[ENEMY] = initrange + 2;
  182.         growth_rate[player]=0.3;
  183.         growth_rate[ENEMY]= 0.5;
  184.  
  185.         switch (rnd(3)) {
  186.                 case 1: weapons[ENEMY] = rnd(4) + 2;
  187.                         break;
  188.  
  189.                 case 2: vel[ENEMY] = rnd(3);
  190.                         break;
  191.  
  192.                 case 3: growth_rate[ENEMY] = (float)(rnd(4) + 3) / 10.0;
  193.                         break;
  194.         };
  195.  
  196.         game_over=false;
  197.         turn=1;
  198.         production_year = 1;
  199.         printmap();
  200.         point(33,20);
  201.         printf("*Initialization*");
  202.         init_player();
  203. }
  204.  
  205.  
  206.  
  207. init_player()
  208. {
  209.         char str, key; 
  210.         int star_number;
  211.         int balance,cost,amt,ind; 
  212.         char iline[81];
  213.         do {
  214.                 point(1,18);
  215.                 printf("start at star?\n     ");
  216.                 get_char(&str);
  217.                 point(1,19);
  218.                 star_number= str-'A'+1;
  219.         } 
  220.         while (star_number < 1 || star_number > nstars);
  221.         tf[player][1].x=stars[star_number].x;
  222.         tf[player][1].y=stars[star_number].y;
  223.         tf_stars[star_number][player]=1;
  224.         tf[player][1].dest = star_number;
  225.         point(1,20);
  226.         printf("choose your initial fleet.");
  227.         point(1,21);
  228.         printf("you have %d transports", initunit);
  229.         point(1,22);
  230.         printf(" && %d units to spend", initmoney);
  231.         point(1,23);
  232.         printf("on ships or research.");
  233.         balance= initmoney;
  234.         do {
  235.                 point(1,19);
  236.                 pr3nt_tf(1);
  237.                 point(1,18);
  238.                 printf("%3d?                          ", balance);
  239.                 point(6,18);
  240.                 get_line(iline,&ind,false);
  241.                 do {
  242.                         get_token(iline,&ind,&amt,&key);
  243.                         switch ( key ) {
  244.                         case 'C':
  245.                                 cost= amt*c_cost;
  246.                                 if ( cost <= balance ) {
  247.                                         tf[player][1].c=tf[player][1].c+amt;
  248.                                 }
  249.                                 break;
  250.                         case 'S':
  251.                                 cost= amt*s_cost;
  252.                                 if ( cost <= balance ) {
  253.                                         tf[player][1].s=tf[player][1].s+amt;
  254.                                 };
  255.                                 break;
  256.                         case 'B':
  257.                                 cost= amt*b_cost;
  258.                                 if ( cost <= balance ) {
  259.                                         tf[player][1].b=tf[player][1].b+amt;
  260.                                 };
  261.                                 break;
  262.                         case 'H': 
  263.                                 help(0); 
  264.                                 cost = 0;
  265.                                 break;
  266.                         case 'W': 
  267.                         case 'V': 
  268.                         case 'R':
  269.                                 cost= amt;
  270.                                 if ( cost <= balance )
  271.                                         research(player,key,amt);
  272.                                 break;
  273.                         case ' ': 
  274.                                 cost=0; 
  275.                                 break;
  276.                         case '>':
  277.                                 point(1,18);
  278.                                 printf(">?      ");
  279.                                 point(3,18);
  280.                                 cost=0;
  281.                                 get_char(&key);
  282.                                 switch ( key ) {
  283.                                 case 'M': 
  284.                                         printmap(); 
  285.                                         break;
  286.                                 case 'R': 
  287.                                         ressum(); 
  288.                                         break;
  289.                                 default:
  290.                                         error_message();
  291.                                         printf(" !Only M,R during initialize");
  292.                                 }; /*!= switch (*/
  293.                                 break;
  294.                         default:
  295.                                 error_message();
  296.                                 printf( " !Illegal field %c",key);
  297.                         }; /*switch (*/
  298.                         if ( cost <= balance )
  299.                                 balance = balance - cost;
  300.                         else {
  301.                                 error_message();
  302.                                 printf("  !can't afford %c",key);
  303.                         };
  304.                 } 
  305.                 while (key != ' ');
  306.         } 
  307.         while (balance >0);
  308.         stars[star_number].visit[player]=true;
  309.         board[stars[star_number].x][stars[star_number].y].tf = 'a';
  310.         board[stars[star_number].x][stars[star_number].y].enemy=' ';
  311.         on_board(stars[star_number].x,stars[star_number].y);
  312.         point(33,20);
  313. }
  314.  
  315. initmach()
  316. {
  317.         int res_amt, maxx, start_star, starnum, count;
  318.         float slist[nstars+1];
  319.  
  320.         en_research = 'V';
  321.         tf[ENEMY][1].c = 1;
  322.         tf[ENEMY][1].s = 2;
  323.         res_amt = 2;
  324.         research(ENEMY, en_research, res_amt);
  325.         maxx = 0;
  326.         start_star = 0;
  327.         for (starnum = 1; starnum <= nstars; starnum++) {
  328.                 get_stars(starnum, slist, &count);
  329.                 count += rnd(5);
  330.                 if (count > maxx) {
  331.                         maxx = count;
  332.                         start_star = starnum;
  333.                 }
  334.         }
  335.         tf[ENEMY][1].dest = start_star;
  336.         tf[ENEMY][1].x = stars[start_star].x;
  337.         tf[ENEMY][1].y = stars[start_star].y;
  338.         stars[start_star].visit[ENEMY] = true;
  339.         tf_stars[start_star][ENEMY] = 1;
  340.         point(50,1);
  341.         pr5nt_star(tf[player][1].dest);
  342.         clear_field();
  343.         if (start_star == tf[player][1].dest) {
  344.                 cle3r_left();
  345.                 battle();
  346.         }
  347. }
  348.  
  349.